//
// Created by tcj on 2022/7/13.
//

#ifndef WEB_TEST_EPOLL_H
#define WEB_TEST_EPOLL_H

#include "sys/epoll.h"
#include "fcntl.h"
#include "unistd.h"
#include "assert.h"
#include "vector"
#include "errno.h"

namespace tcj{
    class epoller {
    public:
//        在C++中，explicit关键字用来修饰类的构造函数，被修饰的构造函数的类，不能发生相应的隐式类型转换，
//        只能以显示的方式进行类型转换。
        explicit epoller(int maxEvent=1024);
        ~epoller();

        // fd 加入epoll树
        bool addFd(int fd,uint32_t events);
        // 修改 fd的描述符
        bool modFd(int fd,uint32_t events);
        // 删除fd的描述符
        bool delFd(int fd);
        // 用于返回监控的结果，成功时返回就绪的文件描述符的个数
        int wait(int timewait=-1);

        // 获取fd的函数
        int getEventFd(size_t i) const;
        // 获取events的函数
        uint32_t getEvents(size_t i) const;

    private:
        int epollFd_;   // epoll的描述符
        std::vector<struct epoll_event> events_; // 就绪的事件

    };
}



#endif //WEB_TEST_EPOLL_H
